package leetcode7;


/**
 * @Author tyy
 * @Description 7. 整数反转
 * 给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。
    如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ，就返回 0。
    假设环境不允许存储 64 位整数（有符号或无符号）。
    示例 1：
    输入：x = 123
    输出：321
    来源：力扣（LeetCode）
    链接：https://leetcode-cn.com/problems/reverse-integer
 * @Since 2021/10/5
 */
public class Solution {
    public int reverse3(int x) {
        int ans = 0;
        while (x != 0) {
            int pop = x % 10;
            if (ans > Integer.MAX_VALUE / 10 || (ans == Integer.MAX_VALUE / 10 && pop > 7))
                return 0;
            if (ans < Integer.MIN_VALUE / 10 || (ans == Integer.MIN_VALUE / 10 && pop < -8))
                return 0;
            ans = ans * 10 + pop;
            x /= 10;
        }
        return ans;
    }
    public int reverse2(int x) {
        int y = 0;
        while (x != 0) {
            if (y > 214748364 || y < -214748364) {
                return 0;
            }
            y = y * 10 + x % 10;
            x = x / 10;
        }
        return y;
    }
    public int reverse(int x) {
        String str = String.valueOf(x);
        String s = new StringBuilder(str).reverse().toString();
        String[] split = s.split("-", -1);
        if (split.length == 2) {
            String s1 = split[0];
            s = "-" + s1;
        }
        Long num = Long.parseLong(s);
        if (num > Integer.MAX_VALUE || num < Integer.MIN_VALUE) {
            return 0;
        }
        return Math.toIntExact(num);
    }
    public static void main(String[] args) {
        System.out.println("Integer.MAX_VALUE = " + Integer.MAX_VALUE);
        System.out.println("Integer.MIN_VALUE = " + Integer.MIN_VALUE);
        int reverse = new Solution().reverse(-2147483648);
        System.out.println("reverse = " + reverse);
        


    }
}
